package com.common.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;

public class BeanUtil {
	
	public static String getMapStringValue(Map<String, Object> params,String key){
		if(params==null) {
			return null;
		}
		return params.get(key)==null? null:params.get(key).toString();
	}

	/**
	 * 将sourceBean的属性复制到targetBean
	 * @param sourceBean  源对象
	 * @param targetBean  目标对象
	 */
	public static void beanCopy(Object sourceBean,Object targetBean) throws Exception{
		Class sourceClass = sourceBean.getClass();//得到对象的Class
		Class targetClass = targetBean.getClass();//得到对象的Class
		Field[] sourceFields = sourceClass.getDeclaredFields();//得到Class对象的所有属性
		Field[] targetFields = targetClass.getDeclaredFields();//得到Class对象的所有属性
		for(Field sourceField : sourceFields){
			String name = sourceField.getName();//属性名
			Class type = sourceField.getType();//属性类型
			String methodName = name.substring(0, 1).toUpperCase() + name.substring(1);
			Method getMethod = sourceClass.getMethod("get" + methodName);//得到属性对应get方法
			Object value = getMethod.invoke(sourceBean);//执行源对象的get方法得到属性值
			for(Field targetField : targetFields){
				String targetName = targetField.getName();//目标对象的属性名
				if(targetName.equals(name)){
					Method setMethod = targetClass.getMethod("set" + methodName, type);//属性对应的set方法
					setMethod.invoke(targetBean, value);//执行目标对象的set方法
					continue;
				}
			}
		}
	}
}
